package com.persistance;

import com.metier.*;
import com.util.HibernateSession;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 * Classe metier borne
 * 
 * Permet l'instanciation d'un objet de type AccesData qui delivre des methodes
 * relatives aux differents classes DAO
 * 
 * @author b0dian
 * @version 1.0
 */
public class AccesData {
	// proprietees
    private static Session session = HibernateSession.getSession();

	// accesseurs sur les proprietes du dessus
	/**
	 * Accesseur getStation qui prend en parram�tre un id de station et nous
	 * renvoie la station correspondante en utilisant la methode find
	 * 
	 * @param id
	 *            de type int
	 * @return s de type Station
	 */
	public static Station getStation(int id) {
	    Station st = (Station) session.get(Station.class, id);
        return st;
	}

	/**
	 * Accesseur getStations qui renvoie toutes les station en utilisant la
	 * methode retrieve
	 * 
	 * @return listeStation de type collections de stations
	 */
	public static List<Station> getStations() {
	    List<Station> st = session.createQuery("from Station").list();
        return st;
	}

	/**
	 * Accesseur getBorne qui prend en parram�tre un id de borne et nous renvoie
	 * la borne correspondante en utilisant la methode find
	 * 
	 * @param id
	 *            de type int
	 * @return b de type Borne
	 */
	public static Borne getBorne(int id) {
	    Borne b = (Borne) session.get(Borne.class, id);
        return b;
	}

	/**
	 * Accesseur getBornes qui renvoie toutes les Bornes en utilisant la methode
	 * retrieve
	 * 
	 * @return listeBornes de type collections de Bornes
	 */
	public static List<Borne> getBornes() {
	    List<Borne> b = session.createQuery("from Borne").list();
        return b;
	}

	/**
	 * Accesseur getBorneByIdStation qui renvoie toutes les Bornes existantes
	 * dans la station grace a l'id de station passe en parram�tre en utilisant
	 * la methode retrieve par id
	 * 
	 * @return listeBornes de type collections de Bornes
	 */
	public static List<Borne> getBorneByIdStation(int id) {
		List<Borne> b = session.createQuery("from Borne where idStation="+id).list();
	    return b;
	}

	/**
	 * Accesseur getTypeCharge qui renvoie le typecharge correspondant a l'id
	 * passe en parrametre grace a la methode find
	 * 
	 * @return TypeCharge de type Typecharge
	 */
	public static TypeCharge getTypeCharge(int id) {
	    TypeCharge tp = (TypeCharge) session.get(TypeCharge.class, id);
	    return tp;
	}

	/**
	 * Accesseur getTypesCharges qui renvoie tout les types de charges existant
	 * dans la base de donne grace a la methode retrieve
	 * 
	 * @return TypeCharge de type Typecharge
	 */
	public static List<TypeCharge> getTypesCharges() {
	    List<TypeCharge> liste= session.createQuery("from TypeCharge").list();
		return liste;
	}

	// modificateur sur les prorietes plus haut
	/**
	 * Modificateur createBorne qui prend une borne en parram�tre et qui creera
	 * l'objet dans la base de donnees
	 * 
	 * @param b
	 *            de type Borne
	 * @return test de type boolean
	 */
	public static boolean createBorne(Borne b) {
	    boolean success = false;   
        try {
            Transaction trans = session.beginTransaction();
            session.saveOrUpdate(b);
            trans.commit();
            success = true;

        } catch (Exception e) {
          
        } 
        return success ;
	}

	/**
	 * Modificateur updateBorne qui prend un objet Borne en parram�tre et qui
	 * ira modifier l'objet correspondant dans la base de donnees
	 * 
	 * @param b
	 *            de type Borne
	 * @return test de type boolean
	 */
	public static boolean updateBorne(Borne b) {
	    boolean success = false;   
	    try {
	        Transaction trans = session.beginTransaction();
	        session.saveOrUpdate(b);
	        trans.commit();
	        success = true;

	    } catch (Exception e) {
	      
	    } 
	    return success ;
	}

	/**
	 * Modificateur deleteBorne qui prend un parram�tre Borne et qui ira
	 * supprimer l'entre correspondante dans la base de donnees
	 * 
	 * @param b
	 *            de type Borne
	 * @return test de type boolean
	 */
	public static boolean deleteBorne(Borne b) {
	    boolean success = false;   
        try {
            Transaction trans = session.beginTransaction();
            session.delete(b);
            trans.commit();
            success = true;

        } catch (Exception e) {
          
        } 
        return success ;
	}

	/**
	 * Modificateur createStation qui prend un parram�tre Station et qui ira
	 * creer l'entre correspondante dans la base de donnees
	 * 
	 * @param s
	 *            de type Station
	 * @return test de type boolean
	 */
	public static boolean createStation(Station s) {
	    boolean success = false;   
        try {
            Transaction trans = session.beginTransaction();
            session.saveOrUpdate(s);
            trans.commit();
            success = true;

        } catch (Exception e) {
          
        } 
        return success ;
	}

	/**
	 * Modificateur updateStation qui prend un parram�tre Station et qui ira
	 * modifier l'entre correspondante dans la base de donnees
	 * 
	 * @param s
	 *            de type Station
	 * @return test de type boolean
	 */
	public static boolean updateStation(Station s) {
	    boolean success = false;   
        try {
            Transaction trans = session.beginTransaction();
            session.saveOrUpdate(s);
            trans.commit();
            success = true;

        } catch (Exception e) {
          
        } 
        return success ;
	}

	/**
	 * Modificateur deleteStation qui prend un parram�tre Station et qui ira
	 * supprimer l'entre correspondante dans la base de donnees
	 * 
	 * @param s
	 *            de type Station
	 * @return test de type boolean
	 */
	public static boolean deleteStation(Station s) {
	    boolean success = false;   
        try {
            Transaction trans = session.beginTransaction();
            session.delete(s);
            trans.commit();
            success = true;

        } catch (Exception e) {
          
        } 
        return success ;
	}

	/**
	 * Modificateur createTypeCharge qui prend un parram�tre TypeCharge et qui
	 * ira creer l'entre correspondante dans la base de donnees
	 * 
	 * @param t
	 *            de type Charge
	 * @return test de type boolean
	 */
	public static boolean createTypeCharge(TypeCharge t) {
	    boolean success = false;   
        try {
            Transaction trans = session.beginTransaction();
            session.saveOrUpdate(t);
            trans.commit();
            success = true;

        } catch (Exception e) {
          
        } 
        return success ;
	}

	/**
	 * Modificateur updateTypeCharge qui prend un parram�tre TypeCharge et qui
	 * ira modifier l'entre correspondante dans la base de donnees
	 * 
	 * @param t
	 *            de type Charge
	 * @return test de type boolean
	 */
	public static boolean updateTypeCharge(TypeCharge t) {
	    boolean success = false;   
        try {
            Transaction trans = session.beginTransaction();
            session.saveOrUpdate(t);
            trans.commit();
            success = true;

        } catch (Exception e) {
          
        } 
        return success ;
	}

	/**
	 * Modificateur deleteTypeCharge qui prend un parram�tre TypeCharge et qui
	 * ira supprimer l'entre correspondante dans la base de donnees
	 * 
	 * @param t
	 *            de type Charge
	 * @return test de type boolean
	 */
	public static boolean deleteTypeCharge(TypeCharge t) {
	    boolean success = false;   
        try {
            Transaction trans = session.beginTransaction();
            session.saveOrUpdate(t);
            trans.commit();
            success = true;

        } catch (Exception e) {
          
        } 
        return success ;
	}
	
	
}
